Unityでの定義済み関数とかの呼ばれ方についてメモ


概要

なんか自分の理解をメモっておいたほうがいいような気がした。

あくまで自分が「調べたうえでこんなだった気がする」っていうメモになってしまう。例外はいっぱいありそう。


複数のScriptのUpdateとかどういう順で呼ばれるの

http://answers.unity3d.com/questions/46107/in-what-order-are-all-the-update-functions-called.html


load順。つまりInstantiateした順とか。



Updateとかってどうやって呼ばれてるの

MonoBehaviourを継承してるクラスから、特定の名称のメソッドの実装を検出してぶっ叩いている。


なのでprivateとかで書いても呼ばれる。Buffers - 67.png



http://gamedev.stackexchange.com/questions/115573/how-are-methods-like-awake-start-and-update-called-in-unity


これの最後の回答者と同じ理解。ポイントついてねーけど。

InstantiateあたりはUnityのC++のレイヤを呼んでた気がする。


どっかに「空でもUpdateを定義すると時間をロスする」みたいな記事があった気がする。

わかる人いたら@toru_inoueまで連絡くれると嬉しい。加筆とか訂正したい。



スマフォとかのAPIを読んでる部分

externとかで名前や引数の定義つきポインタを共有、ぶっ叩かれたらポインタに情報がいくのでそれで動いているという理解。

Buffers - 65.png



Kinectとかハードウェアが提供してるもの

スマフォとかのAPI呼ぶのと同様、特定の名称の関数をぶっ叩くポインタ保持レイヤが中間にあると思っている。

なのでこの辺は内部でインスタンス化だけ済ませてC#の関数を呼んでいるのが多い気がする。


まー関数が呼ばれるだけのほうが都合がいいんで、何がいつ呼ばれるかはドキュメント読もう以外にないのが難点。

C#での構造を持っていない、呼ばれるメソッドが存在するだけのケースが多くて、一般的な補完機構にもでてこないしな。

Buffers - 66.png